package co.edu.uniquindio.dao;

import java.util.List;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.Query;

import co.edu.uniquindio.logica.Oferta;
import co.edu.uniquindio.logica.Subasta;

/**
 * Dao implementation class for Dao: SubastaDao
 * esta Dao me permite hacer todo el manejo con la BD
 * de la informacion concernientes a una Subasta
 * @author Andres  Felipe Abril
 * @author Luis Enrique Robledo
 */
@Stateless
@LocalBean
public class SubastaDao extends Dao<Subasta, Integer> {

	/**
	 * Default constructor. 
	 */
	public SubastaDao() {
		// TODO Auto-generated constructor stub
	}

    /**
	 * Metodo para obtener la entidad de subasta
	 * @return Entity de subasta
	 */
	@Override
	protected Class<Subasta> getEntityClass() {
		// TODO Auto-generated method stub
		return Subasta.class;
	}
	/**
	 * este metodo permite obtener una lista de de las subastas con fertas segun un rango especifico
	 * @returncuna lista de subastas
	 */
	@SuppressWarnings("unchecked")
	public List<Subasta> ofertasPorRango()
	{
		Query query = entityManager.createQuery("select subasta from Subasta subasta where 	subasta.precioBase BETWEEN 3000000 and 7000000 " );
		return query.getResultList();
	}
	/**
	 * este metodo me permite contar los registros asociados a una subasta de las ofertas en un rango especifico 
	 * @return una lista de subastas
	 */
	@SuppressWarnings("unchecked")
	public List<Subasta> contarRegistros()
	{
		Query query = entityManager.createQuery("select COUNT(subasta) from Subasta subasta where subasta.precioBase BETWEEN 3000000 and 7000000 " );
		return query.getResultList();
	}
	public Oferta obtenerMayorOferta()
	{
		Query query = entityManager.createQuery("select MAX(oferta.valor) from Subasta subasta INNER JOIN subasta.ofertas oferta " );
        return (Oferta) query.getSingleResult();  
	}
}
